# -*- coding: utf-8 -*-
import os,time
from MsgProcess import MsgProcess, MsgType#自美系统内核
import multiprocessing as mp#创建进程
import threading as td#创建线程

#测试线程实现 ok  1.但是线程里不可以使用内置的self.say
#测试进程实现 ok  1.但是新进程里不可以使用内置的self.say 2.不可以在新的进程内执行内置的self.Stop()


class Reboot(MsgProcess):
    '''关机重启类 '''
    
    #定义全局共享内存
    key = mp.Value("h",0)  
    
    #关闭插件
    def kill_my(self,key):
        while 1:
            #设置监听间隔    
            time.sleep(1)
            #判断是否已经结束
            #print("kill",key.value)
            if key.value==0:                
                break
                
        #退出插件。
        self.Stop()
 
        
    #启动倒计时关机和重启函数
    def system_kill(self,text,key):
    
        #已经运行 = 2
        key.value =2        
        #for循环倒计时
        for x in "9876543210":  
        
            #设置进程停止条件           
            if key.value  ==1:

                #屏幕显示文字
                self.send(MsgType=MsgType.Text, Receiver="Screen", Data="取消完成")
                #语音播放
                self.send(MsgType=MsgType.Text, Receiver="SpeechSynthesis", Data="取消完成")                  
                #结束进程前初始化内存变量
                key.value = 0               
                #结束进程
                return
            
            #屏幕显示文字
            self.send(MsgType=MsgType.Text, Receiver="Screen", Data=x)
            time.sleep(2)
            
            
        #结束进程前初始化内存变量
        key.value = 0      
        if text =="重启":
            print("sudo reboot")
            os.system("sudo reboot")
            
        elif text =="关机":
            print("sudo init 0")
            os.system("sudo init 0")

 
            
    #执行入口
    def Text(self, message):
       
        data = message['Data'] 

        if type(data) == str:
        
            if  data.count("重启") and  data.count("不要")==0:  

                #判读是否已经运行中
                if self.key.value  ==2:
                    self.say("请稍候...正在执行")
                    return            
                self.say("正在重启，停止请说不要重启。")
                #启动重启倒计时
                mp.Process( target =lambda : self.system_kill('重启',self.key) ).start()
                #线程监听全局是否需要关闭插件       
                td.Thread( target =lambda : self.kill_my (self.key) ).start()                 

 
           
            elif  data.count("关机") and  data.count("不要")==0 :
                if self.key.value  ==2:
                    self.say("请稍候...正在执行")
                    return              
            
                self.say("正在关机，停止请说不要关机。")
                mp.Process( target =lambda : self.system_kill('关机',self.key) ).start()
                #线程监听全局是否需要关闭插件       
                td.Thread( target =lambda : self.kill_my (self.key) ).start()

                
            elif  data.count("不要"):
                #操作过快，需要等待内存变量变更生效
                time.sleep(0.5)
                if self.key.value  == 2:#取消
                    #退出进程=1
                    self.key.value  = 1               
                else:
                    self.say("没有启动该服务")
                    #退出插件。
                    self.Stop()                                      
                    
                   
                
               
    
        

   
  
        
        
        